php插件化开发,有个 PHP 插件设计思路想跟大家探讨下是否可行? 您所在的位置:网站首页 php 插件开发的目录结构 php插件化开发,有个 PHP 插件设计思路想跟大家探讨下是否可行?

php插件化开发,有个 PHP 插件设计思路想跟大家探讨下是否可行?

#php插件化开发,有个 PHP 插件设计思路想跟大家探讨下是否可行?| 来源: 网络整理| 查看: 265

我自己开发了一个 MVC 架构的 CMS 系统(以前帖子提过,暂时只开发到 dev 版本,beta 还未发布),目前系统有个插件功能,我原本已有的一个设计思路是这样:

①系统入口-->根据路由检测 controller 及 action,优先调用插件 plugins 目录的 controller 和 action 如下:

url:http://xxxx/Index/index

↓↓访问插件目录( plugins )同名控制器 IndexController.php 里面的 index 方法

Home/plugins/IndexController.php

↓↓如果不存在同名控制器或者存在控制器,不存在对应方法 index,则访问系统控制器

Home/IndexController.php

上面这个是已有的插件设计思路,用户只需要制作同名控制器放入 plugins 文件夹即可,但是有个弊端是一个方法只能设计一个插件,因为不能存在多个同名文件共存的情况。所以,我打算重新增加一个插件设计,如下:

②系统入口-->根据路由检测系统模块 Home、controller 及 action,查询对应 hook 表内是否有注册这个控制器的插件(钩子),如下:

url:http://xxxx/Index/index

↓↓根据模块 Home、控制器 Index、方法 index 查询表 hook 是否有注册对应的钩子,如果有,则预选执行钩子,如:TestController.php 里面的 index 方法绑定了这个方法,存在多个则根据排序 orders,依次执行。

Home/plugins/TestController.php Class(Test)->index()

如果存在多个注册:

( Home/plugins/Test1Controller.php Class(Test1)->index1())

( Home/plugins/Test2Controller.php Class(Test2)->index2())

↓↓执行完 hook 表里注册的钩子,再执行真正的控制器,当然,有可能钩子里面就直接 exit 了,不再执行下去。

Home/IndexController.php Class(Index)->index()

如上,两种设计思路,可能都是我自创的,我希望是所有控制器都能够自由定义,不拘于个别放置埋点的地方才可以设计插件。第一种设计,在不改动系统文件情况下,完美融入系统,弊端前面也说了,一个类里面的同个方法不能接入多个插件。第二种是我今天刚设计出来的,在安装插件的时候,需要在 hook 表里面新增注册的插件,一个方法可以不限制注册插件个数,执行顺序也可以自由定义,我感觉每次查询数据库这个会导致很大的问题,如果 100W 访问,估计数据库直接 GG 了,要不改为读取文件的形式?实际运用不知道会出现什么状况?想问问大家有什么弊端?或者推荐一下你自己的设计思路,友善谈论。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有